/**
 * 
 */
package com.redis.spi;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.redis.api.DataHandler;
import com.redis.api.DataReader;
import com.redis.api.DataWriter;
import com.redis.bean.KeyValue;

/**
 * @author yangjuanying
 */
public class JedisDataHandler implements DataHandler {
	
	/**
	 * 数据读取器
	 */
	private DataReader reader;
	
	/**
	 * 数据写入器
	 */
	private DataWriter writer;

	/**
	 * @return the reader
	 */
	public DataReader getReader() {
		return reader;
	}

	/**
	 * @param reader the reader to set
	 */
	public void setReader(DataReader reader) {
		this.reader = reader;
	}

	/**
	 * @return the writer
	 */
	public DataWriter getWriter() {
		return writer;
	}

	/**
	 * @param writer the writer to set
	 */
	public void setWriter(DataWriter writer) {
		this.writer = writer;
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#get(byte[])
	 */
	public byte[] get(byte[] key) {
		return getReader().get(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#get(java.lang.String)
	 */
	public String get(String key) {
		return getReader().get(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#get(byte[], byte[])
	 */
	public byte[] get(byte[] key, byte[] emptyDefault) {
		return getReader().get(key, emptyDefault);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#get(java.lang.String, java.lang.String)
	 */
	public String get(String key, String emptyDefault) {
		return getReader().get(key, emptyDefault);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#getBean(java.lang.String)
	 */
	public <T extends Serializable> T getBean(String key) {
		return getReader().getBean(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#getBean(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> T getBean(String key, T t) {
		return getReader().getBean(key, t);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hget(byte[], byte[])
	 */
	public byte[] hget(byte[] key, byte[] field) {
		return getReader().hget(key, field);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hget(byte[], byte[], byte[])
	 */
	public byte[] hget(byte[] key, byte[] field, byte[] emptyDefault) {
		return getReader().hget(key, field, emptyDefault);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hget(java.lang.String, java.lang.String)
	 */
	public String hget(String key, String field) {
		return getReader().hget(key, field);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hget(java.lang.String, java.lang.String, java.lang.String)
	 */
	public String hget(String key, String field, String emptyDefault) {
		return getReader().hget(key, field, emptyDefault);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hgetBean(java.lang.String, java.lang.String)
	 */
	public <T extends Serializable> T hgetBean(String key, String field) {
		return getReader().hgetBean(key, field);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hgetBean(java.lang.String, java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> T hgetBean(String key, String field,
			T emptyDefault) {
		return getReader().hgetBean(key, field, emptyDefault);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hgetAll(java.lang.String)
	 */
	public List<KeyValue> hgetAll(String key) {
		return getReader().hgetAll(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#keys(java.lang.String)
	 */
	public String[] keys(String pattern) {
		return getReader().keys(pattern);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hkeys(java.lang.String)
	 */
	public String[] hkeys(String pattern) {
		return getReader().hkeys(pattern);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#values(java.lang.String)
	 */
	public List<KeyValue> values(String pattern) {
		return getReader().values(pattern);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#ttl(java.lang.String)
	 */
	public long ttl(String key) {
		return getReader().ttl(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#pttl(java.lang.String)
	 */
	public long pttl(String key) {
		return getReader().pttl(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#type(java.lang.String)
	 */
	public String type(String key) {
		return getReader().type(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#exists(java.lang.String)
	 */
	public boolean exists(String key) {
		return getReader().exists(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#getRange(java.lang.String, int, int)
	 */
	public String getRange(String key, int start, int end) {
		return getReader().getRange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hlen(java.lang.String)
	 */
	public long hlen(String key) {
		return getReader().hlen(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#mget(java.lang.String[])
	 */
	public List<KeyValue> mget(String... key) {
		return getReader().mget(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#mget(java.util.List)
	 */
	public List<KeyValue> mget(List<String> keys) {
		return getReader().mget(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#hexists(java.lang.String, java.lang.String)
	 */
	public boolean hexists(String key, String field) {
		return getReader().hexists(key, field);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#lindex(java.lang.String, long)
	 */
	public byte[] lindex(String key, long index) {
		return getReader().lindex(key, index);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#lrange(byte[], long, long)
	 */
	public List<byte[]> lrange(byte[] key, long start, long end) {
		return getReader().lrange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#lrange(java.lang.String, long, long)
	 */
	public List<String> lrange(String key, long start, long end) {
		return getReader().lrange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#lrangeBean(byte[], long, long)
	 */
	public <T extends Serializable> List<T> lrangeBean(byte[] key, long start,
			long end) {
		return getReader().lrangeBean(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#llen(java.lang.String)
	 */
	public long llen(String key) {
		return getReader().llen(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#scard(java.lang.String)
	 */
	public long scard(String key) {
		return getReader().scard(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sismember(java.lang.String, byte[])
	 */
	public boolean sismember(String key, byte[] member) {
		return getReader().sismember(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sismember(java.lang.String, java.lang.String)
	 */
	public boolean sismember(String key, String member) {
		return getReader().sismember(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sismember(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> boolean sismember(String key, T member) {
		return getReader().sismember(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#smembers(byte[])
	 */
	public Set<byte[]> smembers(byte[] key) {
		return getReader().smembers(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#smembers(java.lang.String)
	 */
	public Set<String> smembers(String key) {
		return getReader().smembers(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#smembersBean(byte[])
	 */
	public <T extends Serializable> Set<T> smembersBean(byte[] key) {
		return getReader().smembersBean(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sunion(byte[][])
	 */
	public Set<byte[]> sunion(byte[]... keys) {
		return getReader().sunion(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sunion(java.lang.String[])
	 */
	public Set<String> sunion(String... keys) {
		return getReader().sunion(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sunionBean(byte[][])
	 */
	public <T extends Serializable> Set<T> sunionBean(byte[]... keys) {
		return getReader().sunionBean(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sdiff(byte[][])
	 */
	public Set<byte[]> sdiff(byte[]... keys) {
		return getReader().sdiff(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sdiff(java.lang.String[])
	 */
	public Set<String> sdiff(String... keys) {
		return getReader().sdiff(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sdiffBean(byte[][])
	 */
	public <T extends Serializable> Set<T> sdiffBean(byte[]... keys) {
		return getReader().sdiffBean(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sinter(byte[][])
	 */
	public Set<byte[]> sinter(byte[]... keys) {
		return getReader().sinter(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sinter(java.lang.String[])
	 */
	public Set<String> sinter(String... keys) {
		return getReader().sinter(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#sinterBean(byte[][])
	 */
	public <T extends Serializable> Set<T> sinterBean(byte[]... keys) {
		return getReader().sinterBean(keys);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zcard(java.lang.String)
	 */
	public long zcard(String key) {
		return getReader().zcard(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zcount(java.lang.String, double, double)
	 */
	public long zcount(String key, double min, double max) {
		return getReader().zcount(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrange(byte[], long, long)
	 */
	public Set<byte[]> zrange(byte[] key, long start, long end) {
		return getReader().zrange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrange(java.lang.String, long, long)
	 */
	public Set<String> zrange(String key, long start, long end) {
		return getReader().zrange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrangeBean(java.lang.String, long, long)
	 */
	public <T extends Serializable> Set<T> zrangeBean(String key, long start,
			long end) {
		return getReader().zrangeBean(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrangeByScore(byte[], double, double)
	 */
	public Set<byte[]> zrangeByScore(byte[] key, double min, double max) {
		return getReader().zrangeByScore(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrangeByScore(java.lang.String, double, double)
	 */
	public Set<String> zrangeByScore(String key, double min, double max) {
		return getReader().zrangeByScore(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrangeByScoreBean(java.lang.String, double, double)
	 */
	public <T extends Serializable> Set<T> zrangeByScoreBean(String key,
			double min, double max) {
		return getReader().zrangeByScoreBean(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrank(java.lang.String, byte[])
	 */
	public long zrank(String key, byte[] member) {
		return getReader().zrank(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrank(java.lang.String, java.lang.String)
	 */
	public long zrank(String key, String member) {
		return getReader().zrank(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrankBean(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> long zrankBean(String key, T member) {
		return getReader().zrankBean(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrange(byte[], long, long)
	 */
	public Set<byte[]> zrevrange(byte[] key, long start, long end) {
		return getReader().zrevrange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrange(java.lang.String, long, long)
	 */
	public Set<String> zrevrange(String key, long start, long end) {
		return getReader().zrevrange(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrangeBean(java.lang.String, long, long)
	 */
	@Override
	public <T extends Serializable> Set<T> zrevrangeBean(String key,
			long start, long end) {
		return getReader().zrevrangeBean(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zscore(java.lang.String, byte[])
	 */
	public Double zscore(String key, byte[] member) {
		return getReader().zscore(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zscore(java.lang.String, java.lang.String)
	 */
	public Double zscore(String key, String member) {
		return getReader().zscore(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zscoreBean(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> Double zscoreBean(String key, T member) {
		return getReader().zscoreBean(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrangeByScore(byte[], double, double)
	 */
	public Set<byte[]> zrevrangeByScore(byte[] key, double min, double max) {
		return getReader().zrevrangeByScore(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrangeByScore(java.lang.String, double, double)
	 */
	public Set<String> zrevrangeByScore(String key, double min, double max) {
		return getReader().zrevrangeByScore(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrangeByScoreBean(java.lang.String, double, double)
	 */
	public <T extends Serializable> Set<T> zrevrangeByScoreBean(String key,
			double min, double max) {
		return getReader().zrevrangeByScoreBean(key, min, max);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrank(java.lang.String, byte[])
	 */
	public long zrevrank(String key, byte[] member) {
		return getReader().zrevrank(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrank(java.lang.String, java.lang.String)
	 */
	public long zrevrank(String key, String member) {
		return getReader().zrevrank(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zrevrankBean(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> long zrevrankBean(String key, T member) {
		return getReader().zrevrankBean(key, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataReader#zgetPage(java.lang.String, int, int)
	 */
	public <T extends Serializable> List<T> zgetPage(String key, int pageNo,
			int pageSize) {
		return getReader().zgetPage(key, pageNo, pageSize);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#set(byte[], byte[])
	 */
	public boolean set(byte[] key, byte[] value) {
		return getWriter().set(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#setnx(byte[], byte[])
	 */
	public boolean setnx(byte[] key, byte[] value) {
		return getWriter().setnx(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#setnx(java.lang.String, java.lang.String)
	 */
	public boolean setnx(String key, String value) {
		return getWriter().setnx(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#setnx(java.lang.String, java.lang.String, int)
	 */
	public boolean setnx(String key, String value, int expire) {
		return getWriter().setnx(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#set(byte[], byte[], int)
	 */
	public boolean set(byte[] key, byte[] value, int expire) {
		return getWriter().set(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#set(java.lang.String, java.lang.String)
	 */
	public boolean set(String key, String value) {
		return getWriter().set(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#set(java.lang.String, java.lang.String, int)
	 */
	public boolean set(String key, String value, int expire) {
		return getWriter().set(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#setBean(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> boolean setBean(String key, T value) {
		return getWriter().setBean(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#setBean(java.lang.String, java.io.Serializable, int)
	 */
	public <T extends Serializable> boolean setBean(String key, T value,
			int expire) {
		return getWriter().setBean(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#getSet(byte[], byte[])
	 */
	public byte[] getSet(byte[] key, byte[] value) {
		return getWriter().getSet(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#getSet(byte[], byte[], int)
	 */
	public byte[] getSet(byte[] key, byte[] value, int expire) {
		return getWriter().getSet(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#getSet(java.lang.String, java.lang.String)
	 */
	public String getSet(String key, String value) {
		return getWriter().getSet(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#getSet(java.lang.String, java.lang.String, int)
	 */
	public String getSet(String key, String value, int expire) {
		return getWriter().getSet(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#getSetBean(java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> T getSetBean(String key, T value) {
		return getWriter().getSetBean(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#getSetBean(java.lang.String, java.io.Serializable, int)
	 */
	public <T extends Serializable> T getSetBean(String key, T value, int expire) {
		return getWriter().getSetBean(key, value, expire);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#append(java.lang.String, byte[])
	 */
	public long append(String key, byte[] value) {
		return getWriter().append(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#append(java.lang.String, java.lang.String)
	 */
	public long append(String key, String value) {
		return getWriter().append(key, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#mset(java.lang.String[])
	 */
	public boolean mset(String... kvs) {
		return getWriter().mset(kvs);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#msetnx(java.lang.String[])
	 */
	public long msetnx(String... kvs) {
		return getWriter().msetnx(kvs);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#del(java.lang.String)
	 */
	public boolean del(String key) {
		return getWriter().del(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#incr(java.lang.String)
	 */
	public long incr(String key) {
		return getWriter().incr(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#incrBy(java.lang.String, long)
	 */
	public long incrBy(String key, long step) {
		return getWriter().incrBy(key, step);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#decr(java.lang.String)
	 */
	public long decr(String key) {
		return getWriter().decr(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#decrBy(java.lang.String, long)
	 */
	public long decrBy(String key, long step) {
		return getWriter().decrBy(key, step);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#incrByFloat(java.lang.String, double)
	 */
	public double incrByFloat(String key, double step) {
		return getWriter().incrByFloat(key, step);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hset(java.lang.String, java.lang.String, byte[])
	 */
	public boolean hset(String key, String field, byte[] value) {
		return getWriter().hset(key, field, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hsetnx(java.lang.String, java.lang.String, byte[])
	 */
	public boolean hsetnx(String key, String field, byte[] value) {
		return getWriter().hsetnx(key, field, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hset(java.lang.String, java.lang.String, java.lang.String)
	 */
	public boolean hset(String key, String field, String value) {
		return getWriter().hset(key, field, value);
	}
	
	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hmset(java.lang.String, java.util.Map)
	 */
	@Override
	public boolean hmset(String key, Map<String, String> fieldValues) {
		return getWriter().hmset(key, fieldValues);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hsetnx(java.lang.String, java.lang.String, java.lang.String)
	 */
	public boolean hsetnx(String key, String field, String value) {
		return getWriter().hsetnx(key, field, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hsetBean(java.lang.String, java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> boolean hsetBean(String key, String field,
			T value) {
		return getWriter().hsetBean(key, field, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hsetnxBean(java.lang.String, java.lang.String, java.io.Serializable)
	 */
	public <T extends Serializable> boolean hsetnxBean(String key,
			String field, T value) {
		return getWriter().hsetnxBean(key, field, value);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hdel(java.lang.String, java.lang.String[])
	 */
	public long hdel(String key, String... fields) {
		return getWriter().hdel(key, fields);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#hincrBy(java.lang.String, java.lang.String, long)
	 */
	public long hincrBy(String key, String field, long step) {
		return getWriter().hincrBy(key, field, step);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#srem(java.lang.String, byte[][])
	 */
	public long srem(String key, byte[]... members) {
		return getWriter().srem(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpush(java.lang.String, byte[][])
	 */
	public long lpush(String key, byte[]... members) {
		return getWriter().lpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpush(java.lang.String, java.lang.String[])
	 */
	public long lpush(String key, String... members) {
		return getWriter().lpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpush(java.lang.String, java.io.Serializable[])
	 */
	public <T extends Serializable> long lpush(String key, T... members) {
		return getWriter().lpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpushx(java.lang.String, byte[][])
	 */
	public long lpushx(String key, byte[]... members) {
		return getWriter().lpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpushx(java.lang.String, java.lang.String[])
	 */
	public long lpushx(String key, String... members) {
		return getWriter().lpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpushx(java.lang.String, java.io.Serializable[])
	 */
	public <T extends Serializable> long lpushx(String key, T... members) {
		return getWriter().lpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpush(java.lang.String, byte[][])
	 */
	public long rpush(String key, byte[]... members) {
		return getWriter().rpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpush(java.lang.String, java.lang.String[])
	 */
	public long rpush(String key, String... members) {
		return getWriter().rpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpush(java.lang.String, java.io.Serializable[])
	 */
	public <T extends Serializable> long rpush(String key, T... members) {
		return getWriter().rpush(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpushx(java.lang.String, byte[][])
	 */
	public long rpushx(String key, byte[]... members) {
		return getWriter().rpushx(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpushx(java.lang.String, java.lang.String[])
	 */
	public long rpushx(String key, String... members) {
		return getWriter().rpushx(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpushx(java.lang.String, java.io.Serializable[])
	 */
	public <T extends Serializable> long rpushx(String key, T... members) {
		return getWriter().rpushx(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#srem(java.lang.String, java.lang.String[])
	 */
	public long srem(String key, String... members) {
		return getWriter().srem(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#sadd(java.lang.String, byte[][])
	 */
	public long sadd(String key, byte[]... members) {
		return getWriter().sadd(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#sadd(java.lang.String, java.lang.String[])
	 */
	public long sadd(String key, String... members) {
		return getWriter().sadd(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpop(java.lang.String)
	 */
	public byte[] lpop(String key) {
		return getWriter().lpop(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lset(java.lang.String, byte[], long)
	 */
	public boolean lset(String key, byte[] value, long index) {
		return getWriter().lset(key, value, index);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lset(java.lang.String, java.lang.String, long)
	 */
	public boolean lset(String key, String value, long index) {
		return getWriter().lset(key, value, index);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lsetBean(java.lang.String, java.io.Serializable, long)
	 */
	public <T extends Serializable> boolean lsetBean(String key, T value,
			long index) {
		return getWriter().lsetBean(key, value, index);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lrem(java.lang.String, byte[], long)
	 */
	public long lrem(String key, byte[] value, long count) {
		return getWriter().lrem(key, value, count);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lrem(java.lang.String, java.lang.String, long)
	 */
	public long lrem(String key, String value, long count) {
		return getWriter().lrem(key, value, count);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#lpopBean(java.lang.String)
	 */
	public <T extends Serializable> T lpopBean(String key) {
		return getWriter().lpopBean(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpop(java.lang.String)
	 */
	public byte[] rpop(String key) {
		return getWriter().rpop(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpopBean(java.lang.String)
	 */
	public <T extends Serializable> T rpopBean(String key) {
		return getWriter().rpopBean(key);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpoplpush(java.lang.String, java.lang.String)
	 */
	public byte[] rpoplpush(String scrKey, String dstKey) {
		return getWriter().rpoplpush(scrKey, dstKey);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#rpoplpushBean(java.lang.String, java.lang.String)
	 */
	public <T extends Serializable> T rpoplpushBean(String scrKey, String dstKey) {
		return getWriter().rpoplpushBean(scrKey, dstKey);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#ltrim(java.lang.String, long, long)
	 */
	public boolean ltrim(String key, long start, long end) {
		return getWriter().ltrim(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zadd(byte[], java.util.Map)
	 */
	public long zadd(byte[] key, Map<Double, byte[]> scoreMembers) {
		return getWriter().zadd(key, scoreMembers);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zadd(java.lang.String, java.util.Map)
	 */
	public long zadd(String key, Map<Double, String> scoreMembers) {
		return getWriter().zadd(key, scoreMembers);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zaddBean(java.lang.String, java.util.Map)
	 */
	public <T extends Serializable> long zaddBean(String key,
			Map<Double, T> scoreMembers) {
		return getWriter().zaddBean(key, scoreMembers);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zaddPage(java.lang.String, java.util.List, int, int)
	 */
	public <T extends Serializable> long zaddPage(String key, List<T> items,
			int pageNo, int pageSize) {
		return getWriter().zaddPage(key, items, pageNo, pageSize);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zincrBy(java.lang.String, double, byte[])
	 */
	public double zincrBy(String key, double step, byte[] member) {
		return getWriter().zincrBy(key, step, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zincrBy(java.lang.String, double, java.lang.String)
	 */
	public double zincrBy(String key, double step, String member) {
		return getWriter().zincrBy(key, step, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zincrBy(java.lang.String, double, java.io.Serializable)
	 */
	public <T extends Serializable> double zincrBy(String key, double step,
			T member) {
		return getWriter().zincrBy(key, step, member);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zrem(java.lang.String, byte[][])
	 */
	public long zrem(String key, byte[]... members) {
		return getWriter().zrem(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zrem(java.lang.String, java.lang.String[])
	 */
	public long zrem(String key, String... members) {
		return getWriter().zrem(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zrem(java.lang.String, java.io.Serializable[])
	 */
	public <T extends Serializable> long zrem(String key, T... members) {
		return getWriter().zrem(key, members);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zremrangeByRank(java.lang.String, long, long)
	 */
	public long zremrangeByRank(String key, long start, long end) {
		return getWriter().zremrangeByRank(key, start, end);
	}

	/** (non-Javadoc)
	 * @see com.redis.api.DataWriter#zremrangeByScore(java.lang.String, double, double)
	 */
	public long zremrangeByScore(String key, double min, double max) {
		return getWriter().zremrangeByScore(key, min, max);
	}

}
